package api

import (
	"context"
	"gdmin/servlet"
	"github.com/cloudwego/hertz/pkg/app"
	"github.com/cloudwego/hertz/pkg/route"
)

func RoleApi(r *route.RouterGroup) {
	r.POST("/role/save", createRole)
	r.POST("/role/update", updateRole)
	r.POST("/role/page", queryRole)
	r.POST("/role/list", listRole)
	r.POST("/role/byId/:id", byIdRole)
	r.POST("/role/delete/:id", deleteByIdRole)
	r.POST("/role/bind/menu", roleBindMenu)
	return

}

// 角色绑定菜单
// @Tags      角色
// @Summary   角色绑定菜单
// @Produce   application/json
// @Param     data  body      servlet.RoleBindMenu             true  "参数"
// @Success   200   {object}  servlet.Resp{msg=string,data=string}  "成功"
// @Router    /role/bind/menu [post]
func roleBindMenu(ctx context.Context, c *app.RequestContext) {
	var req servlet.RoleBindMenu
	err := c.Bind(&req)
	if err != nil {
		servlet.FailWithMessage(err.Error(), c)
		return
	}
	err = roleService.RoleBindMenu(&req)
	if err != nil {
		servlet.FailWithMessage(err.Error(), c)
		return
	}
	servlet.Ok(c)
	return
}

// 根据id删除角色
// @Tags      角色
// @Summary   根据id删除角色
// @Produce   application/json
// @Success   200   {object}  servlet.Resp{msg=string,data=string}  "成功"
// @Router    /role/delete/:id [post]
func deleteByIdRole(ctx context.Context, c *app.RequestContext) {
	roleService.DeleteByIdRole(c.Param("id"))
	servlet.Ok(c)
}

// 根据id查询角色
// @Tags      角色
// @Summary   根据id查询角色
// @Produce   application/json
// @Param id path int true "角色id"
// @Success   200   {object}  servlet.Resp{msg=string,data=servlet.RoleResp}  "成功"
// @Router    /role/byId/:id [post]
func byIdRole(ctx context.Context, c *app.RequestContext) {

	param := c.Param("id")
	servlet.OkWithData(c, roleService.QueryRoleById(param))
	return

}

// 角色列表
// @Tags      角色
// @Summary   角色列表
// @Produce   application/json
// @Success   200   {object}  servlet.Resp{msg=string,data=servlet.RoleResp}  "成功"
// @Router    /role/list [post]
func listRole(ctx context.Context, c *app.RequestContext) {
	servlet.OkWithData(c, roleService.List())
	return

}

// 角色列表
// @Tags      角色
// @Summary   角色列表
// @Produce   application/json
// @Param     name  query       string false  "名称"
// @Success   200   {object}  servlet.Resp{msg=string,data=servlet.RoleResp}  "成功"
// @Router    /role/page [post]
func queryRole(ctx context.Context, c *app.RequestContext) {
	var req servlet.QueryRoleReq
	err := c.Bind(&req)
	if err != nil {
		servlet.FailWithMessage(err.Error(), c)
		return
	}
	servlet.OkWithData(c, roleService.QueryRole(&req))
	return
}

// 更新角色
// @Tags      角色
// @Summary   更新角色
// @Produce   application/json
// @Param     data  body      servlet.UpdateRoleReq             true  "修改参数"
// @Success   200   {object}  servlet.Resp{msg=string,data=servlet.RoleResp}  "成功"
// @Router    /role/update [post]
func updateRole(ctx context.Context, c *app.RequestContext) {
	var req servlet.UpdateRoleReq
	err := c.Bind(&req)
	if err != nil {
		servlet.FailWithMessage(err.Error(), c)
		return
	}

	role, err := roleService.UpdateRole(&req)
	if err != nil {
		servlet.FailWithMessage(err.Error(), c)
		return
	}
	servlet.OkWithData(c, role)
	return
}

// 创建角色
// @Tags      角色
// @Summary   创建角色
// @Produce   application/json
// @Param     data  body      servlet.CreateRoleReq             true  "修改参数"
// @Success   200   {object}  servlet.Resp{msg=string,data=servlet.RoleResp}  "成功"
// @Router    /role/save [post]
func createRole(ctx context.Context, c *app.RequestContext) {
	var req servlet.CreateRoleReq
	err := c.Bind(&req)
	if err != nil {
		servlet.FailWithMessage(err.Error(), c)
		return
	}

	role, err := roleService.CreateRole(&req)
	if err != nil {
		servlet.FailWithMessage(err.Error(), c)
		return
	}
	servlet.OkWithData(c, role)
	return
}
